home *** CD-ROM | disk | FTP | other *** search
- ; 0001 0 MODULE KERTT (IDENT = '2.0.004'
- ; 0002 0 ) =
- ; 0003 1 BEGIN
- ; 0004 1
- ; 0005 1 SWITCHES LANGUAGE (COMMON);
- ; 0006 1
- ; 0007 1 !<BLF/WIDTH:100>
- ; 0008 1
- ; 0009 1 !++
- ; 0010 1 ! FACILITY:
- ; 0011 1 !
- ; 0012 1 ! KERMIT text processing
- ; 0013 1 !
- ; 0014 1 ! ABSTRACT:
- ; 0015 1 !
- ; 0016 1 ! This module contains all of the text processing required for
- ; 0017 1 ! KERMSG.
- ; 0018 1 !
- ; 0019 1 ! ENVIRONMENT:
- ; 0020 1 !
- ; 0021 1 ! TOPS-10, P/OS, VAX/VMS
- ; 0022 1 !
- ; 0023 1 ! AUTHOR: Robert C. McQueen, CREATION DATE: 29-August-1983
- ; 0024 1 !--
- ; 0025 1
- ; 0026 1 %SBTTL 'Table of Contents'
- ; 0027 1 !
- ; 0028 1 ! TABLE OF CONTENTS:
- ; 0029 1 !
- ; 0030 1 %SBTTL 'Revision History'
- ; 0031 1
- ; 0032 1 !++
- ; 0033 1 !
- ; 0034 1 ! Create this module for PRO/Kermit 1.0, Kermit-10 2(100) and Kermit-32 1.2
- ; 0035 1 !
- ; 0036 1 ! 1.2.000 By: Robert C. McQueen On: 29-August-1983
- ; 0037 1 ! Create this module.
- ; 0038 1 !
- ; 0039 1 ! 1.2.001 By: Robert C. McQueen On: 9-Sept-1983
- ; 0040 1 ! Make the string passed to TERM_DUMP a counted ASCIZ string,
- ; 0041 1 ! not a counted ASCII string.
- ; 0042 1 !
- ; 0043 1 ! 1.2.002 By: Robert C. McQueen On: 16-September-1983
- ; 0044 1 ! Make TT_OUTPUT a global routine, so we can force information
- ; 0045 1 ! output a various points in time.
- ; 0046 1 !
- ; 0047 1 ! 2.0.003 Release for TOPS-10 KERMIT-10 version 2.
- ; 0048 1 ! Release for VAX/VMS KERMIT-32 version 2.
- ; 0049 1 !
- ; 0050 1 ! 2.0.004 By: Nick Bush On: 22-December-1983
- ; 0051 1 ! Add TT_HOLD to indicate that output should not be dumped
- ; 0052 1 ! when LF's are seen, only when buffer is full.
- ; 0053 1 !--
- ; 0054 1
- ; 0055 1 %SBTTL 'Library files'
- ; 0056 1 !
- ; 0057 1 ! INCLUDE FILES:
- ; 0058 1 !
- ; 0059 1 !
- ; 0060 1 ! KERMIT common definitions
- ; 0061 1 !
- ; 0062 1
- ; 0063 1 REQUIRE 'KERCOM';
- ; 0272 1
- ; 0273 1 %SBTTL 'Symbol definitions'
- ; 0274 1 !
- ; 0275 1 ! EQUATED SYMBOLS:
- ; 0276 1 !
- ; 0277 1
- ; 0278 1 LITERAL
- ; 0279 1 TEXT_BFR_LENGTH = 256; ! Length of the text buffer
- ; 0280 1
- ; 0281 1 %SBTTL 'Storage'
- ; 0282 1 !
- ; 0283 1 ! OWN STORAGE:
- ; 0284 1 !
- ; 0285 1 !
- ; 0286 1 ! TT_xxxxx routine storage
- ; 0287 1 !
- ; 0288 1
- ; 0289 1 OWN
- ; 0290 1 HOLD_FLAG, ! Output should be held even if CRLF seen
- ; 0291 1 DUMP_ROUTINE, ! Address of routine to dump text
- ; 0292 1 TEXT_COUNT, ! Count of the characters
- ; 0293 1 TEXT_POINTER, ! Pointer to store characters
- ; 0294 1 TEXT_BUFFER : VECTOR [CH$ALLOCATION (TEXT_BFR_LENGTH)]; ! Buffer of characters
- ; 0295 1
- ; 0296 1 %SBTTL 'External storage'
- ; 0297 1
- ; 0298 1 !++
- ; 0299 1 ! The following is the various external storage locations that are
- ; 0300 1 ! referenced from this module.
- ; 0301 1 !--
- ; 0302 1
- ; 0303 1 !
- ; 0304 1 ! KERMSG storage
- ; 0305 1 !
- ; 0306 1
- ; 0307 1 EXTERNAL
- ; 0308 1 CONNECT_FLAG; ! Flag if communications line is TT:
- ; 0309 1
- ; 0310 1 !++
- ; 0311 1 ! The following is the only external routine used by this module. This
- ; 0312 1 ! routine will cause the terminal buffer that we have been building to be
- ; 0313 1 ! output on the terminal
- ; 0314 1 !--
- ; 0315 1
- ; 0316 1 EXTERNAL ROUTINE
- ; 0317 1 TERM_DUMP : NOVALUE; ! Output the terminal buffer
- ; 0318 1
- ; 0319 1 %SBTTL 'Terminal routines -- TT_INIT - Initialize this module'
- ; 0320 1
- ; 0321 1 GLOBAL ROUTINE TT_INIT : NOVALUE =
- ; 0322 1
- ; 0323 1 !++
- ; 0324 1 ! FUNCTIONAL DESCRIPTION:
- ; 0325 1 !
- ; 0326 1 ! This routine will initialize the terminal processing module. It will
- ; 0327 1 ! initialize the various data locations in this module.
- ; 0328 1 !
- ; 0329 1 ! CALLING SEQUENCE:
- ; 0330 1 !
- ; 0331 1 ! TT_INIT();
- ; 0332 1 !
- ; 0333 1 ! INPUT PARAMETERS:
- ; 0334 1 !
- ; 0335 1 ! None.
- ; 0336 1 !
- ; 0337 1 ! IMPLICIT INPUTS:
- ; 0338 1 !
- ; 0339 1 ! None.
- ; 0340 1 !
- ; 0341 1 ! OUTPUT PARAMETERS:
- ; 0342 1 !
- ; 0343 1 ! None.
- ; 0344 1 !
- ; 0345 1 ! IMPLICIT OUTPUTS:
- ; 0346 1 !
- ; 0347 1 ! None.
- ; 0348 1 !
- ; 0349 1 ! COMPLETION CODES:
- ; 0350 1 !
- ; 0351 1 ! None.
- ; 0352 1 !
- ; 0353 1 ! SIDE EFFECTS:
- ; 0354 1 !
- ; 0355 1 ! None.
- ; 0356 1 !
- ; 0357 1 !--
- ; 0358 1
- ; 0359 2 BEGIN
- ; 0360 2 !
- ; 0361 2 ! Now initialize the various pointers
- ; 0362 2 !
- ; 0363 2 TEXT_COUNT = 0;
- ; 0364 2 TEXT_POINTER = CH$PTR (TEXT_BUFFER);
- ; 0365 2 DUMP_ROUTINE = TERM_DUMP; ! Initial output routine is to terminal
- ; 0366 2 HOLD_FLAG = FALSE; ! Dump output on CRLF's
- ; 0367 1 END; ! End of TT_INIT
-
-
- .TITLE KERTT
- .IDENT \2.0.004\
-
- .PSECT $OWN$,NOEXE,2
-
- ;HOLD_FLAG
- U.1: .BLKB 4 ; 00000
- ;DUMP_ROUTINE
- U.2: .BLKB 4 ; 00004
- ;TEXT_COUNT
- U.3: .BLKB 4 ; 00008
- ;TEXT_POINTER
- U.4: .BLKB 4 ; 0000C
- ;TEXT_BUFFER
- U.5: .BLKB 256 ; 00010
-
- FNM_NORMAL== 1
- FNM_FULL== 2
- FNM_UNTRAN== 4
- PR_MIN== 0
- PR_NONE== 0
- PR_MARK== 1
- PR_EVEN== 2
- PR_ODD== 3
- PR_SPACE== 4
- PR_MAX== 4
- GC_MIN== 1
- GC_EXIT== 1
- GC_DIRECTORY== 2
- GC_DISK_USAGE== 3
- GC_DELETE== 4
- GC_TYPE== 5
- GC_HELP== 6
- GC_LOGOUT== 7
- GC_LGN== 8
- GC_CONNECT== 9
- GC_RENAME== 10
- GC_COPY== 11
- GC_WHO== 12
- GC_SEND_MSG== 13
- GC_STATUS== 14
- GC_COMMAND== 15
- GC_KERMIT== 16
- GC_JOURNAL== 17
- GC_VARIABLE== 18
- GC_PROGRAM== 19
- GC_MAX== 19
- DP_FULL== 0
- DP_HALF== 1
- CHK_1CHAR== 49
- CHK_2CHAR== 50
- CHK_CRC== 51
- MAX_MSG== 1002
- .EXTRN CONNECT_FLAG, TERM_DUMP
-
- .PSECT $CODE$,NOWRT,2
-
- .ENTRY TT_INIT, ^M<R2> ;TT_INIT, Save R2 0321 0004 00000
- MOVAB W^U.3, R2 ;U.3, R2 52 0000' CF 9E 00002
- CLRL (R2) ;TEXT_COUNT 0363 62 D4 00007
- MOVAB 8(R2), 4(R2) ;TEXT_BUFFER, TEXT_POINTER 0364 04 A2 08 A2 9E 00009
- MOVAB W^TERM_DUMP, -4(R2) ;TERM_DUMP, DUMP_ROUTINE 0365 FC A2 0000G CF 9E 0000E
- CLRL -8(R2) ;HOLD_FLAG 0366 F8 A2 D4 00014
- RET ; 0367 04 00017
-
- ; Routine Size: 24 bytes, Routine Base: $CODE$ + 0000
-
-
- ; 0368 1
- ; 0369 1 %SBTTL 'TT_SET_OUTPUT - Set output routine to use'
- ; 0370 1
- ; 0371 1 GLOBAL ROUTINE TT_SET_OUTPUT (OUT_RTN) =
- ; 0372 1
- ; 0373 1 !++
- ; 0374 1 ! FUNCTIONAL DESCRIPTION:
- ; 0375 1 !
- ; 0376 1 ! This routine will set the output routine to use for the TT_xxx routines.
- ; 0377 1 !The argument is a routine address which will output a counted ASCIZ string.
- ; 0378 1 !It will return the address of the previous output routine.
- ; 0379 1 !
- ; 0380 1 ! CALLING SEQUENCE:
- ; 0381 1 !
- ; 0382 1 ! OLD_RTN = TT_SET_OUTPUT (OUT_RTN);
- ; 0383 1 !
- ; 0384 1 ! INPUT PARAMETERS:
- ; 0385 1 !
- ; 0386 1 ! OUT_RTN - Address of routine to output a counted ASCIZ string
- ; 0387 1 ! called as OUT_RTN (Address of string, length of string)
- ; 0388 1 !
- ; 0389 1 ! IMPLICIT INPUTS:
- ; 0390 1 !
- ; 0391 1 ! DUMP_ROUTINE - Previous output routine
- ; 0392 1 !
- ; 0393 1 ! OUPTUT PARAMETERS:
- ; 0394 1 !
- ; 0395 1 ! The value of the routine is the previous output routine address.
- ; 0396 1 !
- ; 0397 1 ! IMPLICIT OUTPUTS:
- ; 0398 1 !
- ; 0399 1 ! DUMP_ROUTINE - New output routine
- ; 0400 1 !
- ; 0401 1 ! COMPLETION CODES:
- ; 0402 1 !
- ; 0403 1 ! None.
- ; 0404 1 !
- ; 0405 1 ! SIDE EFFECTS:
- ; 0406 1 !
- ; 0407 1 ! None.
- ; 0408 1 !
- ; 0409 1 !--
- ; 0410 1
- ; 0411 2 BEGIN
- ; 0412 2
- ; 0413 2 LOCAL
- ; 0414 2 OLD_RTN; ! Old routine address
- ; 0415 2
- ; 0416 2 OLD_RTN = .DUMP_ROUTINE; ! Remember the old address
- ; 0417 2 DUMP_ROUTINE = .OUT_RTN; ! Save the new
- ; 0418 2 RETURN .OLD_RTN; ! And return the old value
- ; 0419 1 END; ! End of TT_SET_OUTPUT
-
-
-
-
-
- .ENTRY TT_SET_OUTPUT, ^M<> ;TT_SET_OUTPUT, Save nothing 0371 0000 00000
- MOVL W^U.2, R0 ;U.2, OLD_RTN 0416 50 0000' CF D0 00002
- MOVL 4(AP), W^U.2 ;OUT_RTN, U.2 0417 0000' CF 04 AC D0 00007
- RET ; 0418 04 0000D
-
- ; Routine Size: 14 bytes, Routine Base: $CODE$ + 0018
-
-
- ; 0420 1
- ; 0421 1 %SBTTL 'TT_HOLD - Start holding text until TT_OUTPUT call'
- ; 0422 1
- ; 0423 1 GLOBAL ROUTINE TT_HOLD (FLAG) : NOVALUE =
- ; 0424 1
- ; 0425 1 !++
- ; 0426 1 ! FUNCTIONAL DESCRIPTION:
- ; 0427 1 !
- ; 0428 1 ! This routine is called to start buffering an amount of data
- ; 0429 1 ! which should not be output until TT_OUTPUT is called. It
- ; 0430 1 ! sets a flag to indicate that output should not be done on
- ; 0431 1 ! CRLF's.
- ; 0432 1 !
- ; 0433 1 ! CALLING SEQUENCE:
- ; 0434 1 !
- ; 0435 1 ! TT_HOLD (TRUE or FALSE);
- ; 0436 1 !
- ; 0437 1 ! INPUT PARAMETERS:
- ; 0438 1 !
- ; 0439 1 ! FLAG - True if output should be held past LF's. False if output
- ; 0440 1 ! should be dumped on each LF.
- ; 0441 1 !
- ; 0442 1 ! IMPLICIT INPUTS:
- ; 0443 1 !
- ; 0444 1 ! None.
- ; 0445 1 !
- ; 0446 1 ! OUPTUT PARAMETERS:
- ; 0447 1 !
- ; 0448 1 ! None.
- ; 0449 1 !
- ; 0450 1 ! IMPLICIT OUTPUTS:
- ; 0451 1 !
- ; 0452 1 ! HOLD_FLAG is set to true.
- ; 0453 1 !
- ; 0454 1 ! COMPLETION CODES:
- ; 0455 1 !
- ; 0456 1 ! None.
- ; 0457 1 !
- ; 0458 1 ! SIDE EFFECTS:
- ; 0459 1 !
- ; 0460 1 ! None.
- ; 0461 1 !
- ; 0462 1 !--
- ; 0463 1
- ; 0464 2 BEGIN
- ; 0465 2 HOLD_FLAG = .FLAG;
- ; 0466 1 END; ! End of TT_HOLD
-
-
-
-
-
- .ENTRY TT_HOLD, ^M<> ;TT_HOLD, Save nothing 0423 0000 00000
- MOVL 4(AP), W^U.1 ;FLAG, U.1 0465 0000' CF 04 AC D0 00002
- RET ; 0466 04 00008
-
- ; Routine Size: 9 bytes, Routine Base: $CODE$ + 0026
-
-
- ; 0467 1
- ; 0468 1 %SBTTL 'Terminal routines -- TT_OUTPUT - Output the buffer'
- ; 0469 1
- ; 0470 1 GLOBAL ROUTINE TT_OUTPUT : NOVALUE =
- ; 0471 1
- ; 0472 1 !++
- ; 0473 1 ! FUNCTIONAL DESCRIPTION:
- ; 0474 1 !
- ; 0475 1 ! This routine will dump the text buffer on the output device.
- ; 0476 1 !
- ; 0477 1 ! CALLING SEQUENCE:
- ; 0478 1 !
- ; 0479 1 ! TT_OUTPUT();
- ; 0480 1 !
- ; 0481 1 ! INPUT PARAMETERS:
- ; 0482 1 !
- ; 0483 1 ! None.
- ; 0484 1 !
- ; 0485 1 ! IMPLICIT INPUTS:
- ; 0486 1 !
- ; 0487 1 ! None.
- ; 0488 1 !
- ; 0489 1 ! OUTPUT PARAMETERS:
- ; 0490 1 !
- ; 0491 1 ! None.
- ; 0492 1 !
- ; 0493 1 ! IMPLICIT OUTPUTS:
- ; 0494 1 !
- ; 0495 1 ! None.
- ; 0496 1 !
- ; 0497 1 ! COMPLETION CODES:
- ; 0498 1 !
- ; 0499 1 ! None.
- ; 0500 1 !
- ; 0501 1 ! SIDE EFFECTS:
- ; 0502 1 !
- ; 0503 1 ! None.
- ; 0504 1 !
- ; 0505 1 !--
- ; 0506 1
- ; 0507 2 BEGIN
- ; 0508 2
- ; 0509 2 LOCAL
- ; 0510 2 STATUS; ! Status returned by the library routine
- ; 0511 2
- ; 0512 2 !
- ; 0513 2 ! Output the text
- ; 0514 2 !
- ; 0515 2 CH$WCHAR_A (CHR_NUL, TEXT_POINTER);
- ; 0516 2 (.DUMP_ROUTINE) (TEXT_BUFFER, .TEXT_COUNT); ! Output the buffer to the correct place
- ; 0517 2 !
- ; 0518 2 ! Now reset the descriptor and the pointer to a virgin state
- ; 0519 2 !
- ; 0520 2 TEXT_COUNT = 0;
- ; 0521 2 TEXT_POINTER = CH$PTR (TEXT_BUFFER);
- ; 0522 2 !
- ; 0523 1 END; ! End of TT_OUTPUT
-
-
-
-
-
- .ENTRY TT_OUTPUT, ^M<R2> ;TT_OUTPUT, Save R2 0470 0004 00000
- MOVAB W^U.4, R2 ;U.4, R2 52 0000' CF 9E 00002
- CLRB @0(R2) ;@TEXT_POINTER 0515 00 B2 94 00007
- INCL (R2) ;TEXT_POINTER 62 D6 0000A
- PUSHL -4(R2) ;TEXT_COUNT 0516 FC A2 DD 0000C
- PUSHAB 4(R2) ;TEXT_BUFFER 04 A2 9F 0000F
- CALLS #2, @-8(R2) ;#2, @DUMP_ROUTINE F8 B2 02 FB 00012
- CLRL -4(R2) ;TEXT_COUNT 0520 FC A2 D4 00016
- MOVAB 4(R2), (R2) ;TEXT_BUFFER, TEXT_POINTER 0521 62 04 A2 9E 00019
- RET ; 0523 04 0001D
-
- ; Routine Size: 30 bytes, Routine Base: $CODE$ + 002F
-
-
- ; 0524 1
- ; 0525 1 %SBTTL 'Terminal routines -- TT_CHAR - Output a single character'
- ; 0526 1
- ; 0527 1 GLOBAL ROUTINE TT_CHAR (CHARACTER) : NOVALUE =
- ; 0528 1
- ; 0529 1 !++
- ; 0530 1 ! FUNCTIONAL DESCRIPTION:
- ; 0531 1 !
- ; 0532 1 ! This routine will store a character into the text buffer. It will
- ; 0533 1 ! cause the text to be output if the character is a line terminator.
- ; 0534 1 !
- ; 0535 1 ! CALLING SEQUENCE:
- ; 0536 1 !
- ; 0537 1 ! TT_CHAR(Character);
- ; 0538 1 !
- ; 0539 1 ! INPUT PARAMETERS:
- ; 0540 1 !
- ; 0541 1 ! Character - Character to store into the text buffer.
- ; 0542 1 !
- ; 0543 1 ! IMPLICIT INPUTS:
- ; 0544 1 !
- ; 0545 1 ! None.
- ; 0546 1 !
- ; 0547 1 ! OUTPUT PARAMETERS:
- ; 0548 1 !
- ; 0549 1 ! None.
- ; 0550 1 !
- ; 0551 1 ! IMPLICIT OUTPUTS:
- ; 0552 1 !
- ; 0553 1 ! None.
- ; 0554 1 !
- ; 0555 1 ! COMPLETION CODES:
- ; 0556 1 !
- ; 0557 1 ! None.
- ; 0558 1 !
- ; 0559 1 ! SIDE EFFECTS:
- ; 0560 1 !
- ; 0561 1 ! None.
- ; 0562 1 !
- ; 0563 1 !--
- ; 0564 1
- ; 0565 2 BEGIN
- ; 0566 2 !
- ; 0567 2 ! Increment the count of the characters
- ; 0568 2 !
- ; 0569 2 TEXT_COUNT = .TEXT_COUNT + 1;
- ; 0570 2 !
- ; 0571 2 ! And store the character
- ; 0572 2 !
- ; 0573 2 CH$WCHAR_A (.CHARACTER, TEXT_POINTER);
- ; 0574 2 !
- ; 0575 2 ! If this is a line feed then just output the text string
- ; 0576 2 !
- ; 0577 2
- ; 0578 2 IF (.CHARACTER EQL CHR_LFD) AND NOT .HOLD_FLAG THEN TT_OUTPUT ();
- ; 0579 2
- ; 0580 2 !
- ; 0581 2 ! Check to make sure we are not exceeding the limit of the buffer
- ; 0582 2 !
- ; 0583 2
- ; 0584 2 IF .TEXT_COUNT EQL TEXT_BFR_LENGTH - 1 THEN TT_OUTPUT ();
- ; 0585 2
- ; 0586 2 !
- ; 0587 1 END; ! End of TT_CHAR
-
-
-
-
-
- .ENTRY TT_CHAR, ^M<R2> ;TT_CHAR, Save R2 0527 0004 00000
- MOVAB W^U.3, R2 ;U.3, R2 52 0000' CF 9E 00002
- INCL (R2) ;TEXT_COUNT 0569 62 D6 00007
- MOVB 4(AP), @4(R2) ;CHARACTER, @TEXT_POINTER 0573 04 B2 04 AC 90 00009
- INCL 4(R2) ;TEXT_POINTER 04 A2 D6 0000E
- CMPL 4(AP), #10 ;CHARACTER, #10 0578 0A 04 AC D1 00011
- BNEQ 1$ ;1$ 08 12 00015
- BLBS -8(R2), 1$ ;HOLD_FLAG, 1$ 04 F8 A2 E8 00017
- CALLS #0, B^TT_OUTPUT ;#0, TT_OUTPUT C3 AF 00 FB 0001B
- 1$: CMPL (R2), #255 ;TEXT_COUNT, #255 0584 000000FF 8F 62 D1 0001F
- BNEQ 2$ ;2$ 04 12 00026
- CALLS #0, B^TT_OUTPUT ;#0, TT_OUTPUT B6 AF 00 FB 00028
- 2$: RET ; 0587 04 0002C
-
- ; Routine Size: 45 bytes, Routine Base: $CODE$ + 004D
-
-
- ; 0588 1
- ; 0589 1 %SBTTL 'Terminal routines -- TT_TEXT - Output a text string'
- ; 0590 1
- ; 0591 1 GLOBAL ROUTINE TT_TEXT (ADDRESS) : NOVALUE =
- ; 0592 1
- ; 0593 1 !++
- ; 0594 1 ! FUNCTIONAL DESCRIPTION:
- ; 0595 1 !
- ; 0596 1 ! This routine will output text on the user's terminal. It will
- ; 0597 1 ! assume that it must check to determine if it can output the text
- ; 0598 1 ! or not.
- ; 0599 1 !
- ; 0600 1 ! CALLING SEQUENCE:
- ; 0601 1 !
- ; 0602 1 ! TT_TEXT(TEXT_ADDRESS);
- ; 0603 1 !
- ; 0604 1 ! INPUT PARAMETERS:
- ; 0605 1 !
- ; 0606 1 ! None.
- ; 0607 1 !
- ; 0608 1 ! IMPLICIT INPUTS:
- ; 0609 1 !
- ; 0610 1 ! None.
- ; 0611 1 !
- ; 0612 1 ! OUTPUT PARAMETERS:
- ; 0613 1 !
- ; 0614 1 ! None.
- ; 0615 1 !
- ; 0616 1 ! IMPLICIT OUTPUTS:
- ; 0617 1 !
- ; 0618 1 ! None.
- ; 0619 1 !
- ; 0620 1 ! COMPLETION CODES:
- ; 0621 1 !
- ; 0622 1 ! None.
- ; 0623 1 !
- ; 0624 1 ! SIDE EFFECTS:
- ; 0625 1 !
- ; 0626 1 ! None.
- ; 0627 1 !
- ; 0628 1 !--
- ; 0629 1
- ; 0630 2 BEGIN
- ; 0631 2
- ; 0632 2 LOCAL
- ; 0633 2 CHARACTER, ! Character being processed
- ; 0634 2 ARG_POINTER; ! Pointer to the argument's text
- ; 0635 2
- ; 0636 2 !
- ; 0637 2 ! Construct a pointer to the argument.
- ; 0638 2 !
- ; 0639 2 ARG_POINTER = CH$PTR (.ADDRESS);
- ; 0640 2 !
- ; 0641 2 ! Get the first character that was passed.
- ; 0642 2 !
- ; 0643 2 CHARACTER = CH$RCHAR_A (ARG_POINTER);
- ; 0644 2 !
- ; 0645 2 ! Loop reading characters and calling the output routine to process
- ; 0646 2 ! them
- ; 0647 2 !
- ; 0648 2
- ; 0649 2 WHILE .CHARACTER NEQ CHR_NUL DO
- ; 0650 3 BEGIN
- ; 0651 3 TT_CHAR (.CHARACTER);
- ; 0652 3 CHARACTER = CH$RCHAR_A (ARG_POINTER);
- ; 0653 2 END;
- ; 0654 2
- ; 0655 1 END; ! End of TT_TEXT
-
-
-
-
-
- .ENTRY TT_TEXT, ^M<R2,R3> ;TT_TEXT, Save R2,R3 0591 000C 00000
- MOVL 4(AP), R2 ;ADDRESS, ARG_POINTER 0639 52 04 AC D0 00002
- 1$: MOVZBL (R2)+, R3 ;(ARG_POINTER)+, CHARACTER 0643 53 82 9A 00006
- BEQL 2$ ;2$ 0649 08 13 00009
- PUSHL R3 ;CHARACTER 0651 53 DD 0000B
- CALLS #1, B^TT_CHAR ;#1, TT_CHAR C2 AF 01 FB 0000D
- BRB 1$ ;1$ 0652 F3 11 00011
- 2$: RET ; 0655 04 00013
-
- ; Routine Size: 20 bytes, Routine Base: $CODE$ + 007A
-
-
- ; 0656 1
- ; 0657 1 %SBTTL 'Terminal routines -- TT_NUMBER - Output a three digit number'
- ; 0658 1
- ; 0659 1 GLOBAL ROUTINE TT_NUMBER (NUMBER) : NOVALUE =
- ; 0660 1
- ; 0661 1 !++
- ; 0662 1 ! FUNCTIONAL DESCRIPTION:
- ; 0663 1 !
- ; 0664 1 ! This routine will store a three digit number into the text buffer.
- ; 0665 1 ! It will just return if the number is greater than 999.
- ; 0666 1 !
- ; 0667 1 ! CALLING SEQUENCE:
- ; 0668 1 !
- ; 0669 1 ! TT_NUMBER(Value);
- ; 0670 1 !
- ; 0671 1 ! INPUT PARAMETERS:
- ; 0672 1 !
- ; 0673 1 ! Value - Value to output.
- ; 0674 1 !
- ; 0675 1 ! IMPLICIT INPUTS:
- ; 0676 1 !
- ; 0677 1 ! None.
- ; 0678 1 !
- ; 0679 1 ! OUTPUT PARAMETERS:
- ; 0680 1 !
- ; 0681 1 ! None.
- ; 0682 1 !
- ; 0683 1 ! IMPLICIT OUTPUTS:
- ; 0684 1 !
- ; 0685 1 ! None.
- ; 0686 1 !
- ; 0687 1 ! COMPLETION CODES:
- ; 0688 1 !
- ; 0689 1 ! None.
- ; 0690 1 !
- ; 0691 1 ! SIDE EFFECTS:
- ; 0692 1 !
- ; 0693 1 ! None.
- ; 0694 1 !
- ; 0695 1 !--
- ; 0696 1
- ; 0697 2 BEGIN
- ; 0698 2 ROUTINE TT_NUM_WORKER (VALUE) : NOVALUE =
- ; 0699 3 BEGIN
- ; 0700 3
- ; 0701 3 IF .VALUE LEQ 9
- ; 0702 3 THEN
- ; 0703 3 TT_CHAR (.VALUE + %C'0')
- ; 0704 3 ELSE
- ; 0705 4 BEGIN
- ; 0706 4 TT_NUM_WORKER (.VALUE/10);
- ; 0707 4 TT_CHAR ((.VALUE MOD 10) + %C'0');
- ; 0708 3 END;
- ; 0709 3
- ; 0710 2 END;
-
-
-
-
-
- ;TT_NUM_WORKER
- U.13: .WORD ^M<> ;Save nothing 0698 0000 00000
- CMPL 4(AP), #9 ;VALUE, #9 0701 09 04 AC D1 00002
- BGTR 1$ ;1$ 07 14 00006
- ADDL3 #48, 4(AP), -(SP) ;#48, VALUE, -(SP) 0703 04 AC 30 C1 00008
- ; 7E 0000C
- BRB 2$ ;2$ 17 11 0000D
- 1$: DIVL3 #10, 4(AP), -(SP) ;#10, VALUE, -(SP) 0706 04 AC 0A C7 0000F
- ; 7E 00013
- CALLS #1, B^U.13 ;#1, U.13 E8 AF 01 FB 00014
- EMUL #1, 4(AP), #0, -(SP) ;#1, VALUE, #0, -(SP) 0707 04 AC 01 7A 00018
- ; 7E 00 0001C
- EDIV #10, (SP)+, R0, R0 ;#10, (SP)+, R0, R0 8E 0A 7B 0001E
- ; 50 50 00021
- PUSHAB 48(R0) ;48(R0) 30 A0 9F 00023
- 2$: CALLS #1, B^TT_CHAR ;#1, TT_CHAR 95 AF 01 FB 00026
- RET ; 0710 04 0002A
-
- ; Routine Size: 43 bytes, Routine Base: $CODE$ + 008E
-
-
- ; 0711 2
- ; 0712 2 IF .NUMBER LSS 0
- ; 0713 2 THEN
- ; 0714 3 BEGIN
- ; 0715 3 TT_CHAR (%C'-');
- ; 0716 3 NUMBER = -.NUMBER;
- ; 0717 2 END;
- ; 0718 2
- ; 0719 2 TT_NUM_WORKER (.NUMBER);
- ; 0720 1 END; ! End of TT_NUMBER
-
-
-
-
-
- .ENTRY TT_NUMBER, ^M<> ;TT_NUMBER, Save nothing 0659 0000 00000
- TSTL 4(AP) ;NUMBER 0712 04 AC D5 00002
- BGEQ 1$ ;1$ 0B 18 00005
- PUSHL #45 ;#45 0715 2D DD 00007
- CALLS #1, B^TT_CHAR ;#1, TT_CHAR 87 AF 01 FB 00009
- MNEGL 4(AP), 4(AP) ;NUMBER, NUMBER 0716 04 AC 04 AC CE 0000D
- 1$: PUSHL 4(AP) ;NUMBER 0719 04 AC DD 00012
- CALLS #1, B^U.13 ;#1, U.13 BC AF 01 FB 00015
- RET ; 0720 04 00019
-
- ; Routine Size: 26 bytes, Routine Base: $CODE$ + 00B9
-
-
- ; 0721 1
- ; 0722 1 %SBTTL 'Terminal routines -- TT_CRLF - Output a CRLF'
- ; 0723 1
- ; 0724 1 GLOBAL ROUTINE TT_CRLF : NOVALUE =
- ; 0725 1
- ; 0726 1 !++
- ; 0727 1 ! FUNCTIONAL DESCRIPTION:
- ; 0728 1 !
- ; 0729 1 ! This routine will cause the contents of the terminal buffer to be
- ; 0730 1 ! output to SYS$OUTPUT:.
- ; 0731 1 !
- ; 0732 1 ! CALLING SEQUENCE:
- ; 0733 1 !
- ; 0734 1 ! TT_CRLF();
- ; 0735 1 !
- ; 0736 1 ! INPUT PARAMETERS:
- ; 0737 1 !
- ; 0738 1 ! None.
- ; 0739 1 !
- ; 0740 1 ! IMPLICIT INPUTS:
- ; 0741 1 !
- ; 0742 1 ! None.
- ; 0743 1 !
- ; 0744 1 ! OUTPUT PARAMETERS:
- ; 0745 1 !
- ; 0746 1 ! None.
- ; 0747 1 !
- ; 0748 1 ! IMPLICIT OUTPUTS:
- ; 0749 1 !
- ; 0750 1 ! None.
- ; 0751 1 !
- ; 0752 1 ! COMPLETION CODES:
- ; 0753 1 !
- ; 0754 1 ! None.
- ; 0755 1 !
- ; 0756 1 ! SIDE EFFECTS:
- ; 0757 1 !
- ; 0758 1 ! None.
- ; 0759 1 !
- ; 0760 1 !--
- ; 0761 1
- ; 0762 2 BEGIN
- ; 0763 2 TT_CHAR (CHR_CRT);
- ; 0764 2 TT_CHAR (CHR_LFD);
- ; 0765 1 END; ! End of TT_CRLF
-
-
-
-
-
- .ENTRY TT_CRLF, ^M<> ;TT_CRLF, Save nothing 0724 0000 00000
- PUSHL #13 ;#13 0763 0D DD 00002
- CALLS #1, W^TT_CHAR ;#1, TT_CHAR FF71 CF 01 FB 00004
- PUSHL #10 ;#10 0764 0A DD 00009
- CALLS #1, W^TT_CHAR ;#1, TT_CHAR FF6A CF 01 FB 0000B
- RET ; 0765 04 00010
-
- ; Routine Size: 17 bytes, Routine Base: $CODE$ + 00D3
-
-
- ; 0766 1
- ; 0767 1 %SBTTL 'End of KERTRM'
- ; 0768 1 END ! End of module
- ; 0769 1
- ; 0770 0 ELUDOM
-
-
-
-
-
-
- ; PSECT SUMMARY
- ;
- ; Name Bytes Attributes
- ;
- ; $OWN$ 272 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; $CODE$ 228 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
- ; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0)
-
-
-
-
-
-
-
- ; COMMAND QUALIFIERS
-
- ; BLI/LIS/MAC=(ASSEM,UNIQ)/SOUR:NOHEAD VMSTT
-
- ; Compilation Complete
-
- .END
-